package cn.enjoy.tool.utils;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * @author K
 * @date 2022-05-28 9:57
 */
public class DecimalUtil {

    public static void main(String[] args) {
        //推荐使用字符串构造BigDecimal
        //String BigDecimal互转
        BigDecimal bd = new BigDecimal("12.3");
        String str = bd.toString();

        //double BigDecimal互转
        double a = 1.23;
        BigDecimal c = BigDecimal.valueOf(a);
        BigDecimal decimal = new BigDecimal(a);
        double d = c.doubleValue();

        BigDecimal num1 = new BigDecimal("100");
        BigDecimal num2 = new BigDecimal("50");
        //加法
        BigDecimal result1 = num1.add(num2);
        //减法
        BigDecimal result2 = num1.subtract(num2);
        //乘法
        BigDecimal result3 = num1.multiply(num2);
        //除法
        BigDecimal result4 = num1.divide(num2);

        //精度控制
        //ROUND_UP //不管保留数字后面是大是小(0除外)都会进1
        //ROUND_DOWN //保留设置数字，后面所有直接去除
        //ROUND_HALF_UP //常用的四舍五入
        //ROUND_HALF_DOWN //五舍六入
        //ROUND_CEILING //向正无穷方向舍入
        //ROUND_FLOOR //向负无穷方向舍入
        //ROUND_HALF_EVEN //向（距离）最近的一边舍入，除非两边（的距离）是相等,如果是这样，如果保留位数是奇数，使用ROUND_HALF_UP，如果是偶数，使用ROUND_HALF_DOWN
        BigDecimal scale = result4.setScale(2, RoundingMode.DOWN);

        //百分比
        BigDecimal productPrice = new BigDecimal("100");
        BigDecimal percent = new BigDecimal("20.56"); //佣金比例
        BigDecimal costPrice = productPrice.multiply(BigDecimal.ONE.subtract(percent.divide(new BigDecimal("100")))).setScale(2, RoundingMode.DOWN);

        System.out.println();
    }
}
